package com.hildeberto.home.client;

import com.conseilimmo.repository.BatimentBsn;
import com.conseilimmo.repository.LocataireBsn;
import com.conseilimmo.repository.LocationBsn;
import com.conseilimmo.repository.SuiviBsn;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import objetBo.EtatSuivi;
import objetBo.agenda.ElementAgenda;
import objetBo.agenda.LigneAgenda;
import objetsBd.BatimentBd;
import objetsBd.LocataireBd;
import objetsBd.LocationBd;
import objetsBd.SuiviLoyerBd;

/**
 *
 * @author verpoorten
 */
public class AgendaController implements Initializable {

    @FXML
    TableView<LigneAgenda> tableAgenda;
    @FXML
    TableColumn<BatimentBd, String> batimentDenominationCol;
    @FXML
    TableColumn<BatimentBd, String> locataireCol;
    @FXML
    TableColumn<BatimentBd, String> dateCol;
    @FXML
    TableColumn<BatimentBd, String> etatCol;
    @FXML
    private TextField lblMois;
    @FXML
    private TextField lblAnnee;
    @FXML
    private TextArea messageInfo;
    private static final Logger LOGGER = Logger.getLogger(AgendaController.class.getName());

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        batimentDenominationCol.setCellValueFactory(new PropertyValueFactory<BatimentBd, String>("denomination"));

        if (!MainApp.getModeAvecBd()) {
            garnir2(1L, new Date());
        } else {
            garnir2(null, new Date());
        }
    }

    public TextArea getMessageInfo() {
        return messageInfo;
    }

    public void setMessageInfo(TextArea messageInfo) {
        this.messageInfo = messageInfo;
    }

    private void garnir2(Long idBatiment, Date dateDuJourParam) {

        Integer moisEnCours = null;
        Integer anneeEnCours = null;
        Date dateDuJour = new Date();
        if (dateDuJourParam != null) {
            dateDuJour = dateDuJourParam;
            Calendar dateTrav = new GregorianCalendar();
            dateTrav.setTime(dateDuJour);

            moisEnCours = dateTrav.get(Calendar.MONTH);
            anneeEnCours = dateTrav.get(Calendar.YEAR);
            Integer moisAAfficher = (moisEnCours + 1);
            lblMois.setText(moisAAfficher.toString());
            lblAnnee.setText(anneeEnCours.toString());
        } else {
            lblMois.setText("");
            lblAnnee.setText("");
        }

        int ligne = 0;

        List<ElementAgenda> elts = new ArrayList<>();
        List<LigneAgenda> elts2 = new ArrayList<>();
        List<BatimentBd> batimentListes = new ArrayList<>();
        if (idBatiment == null) {
            BatimentBsn batrimentSn = new BatimentBsn();
            List<BatimentBd> batimentsss = batrimentSn.trouverListeBatiments();
            batimentListes.addAll(batimentsss);
        } else {
            BatimentBsn batrimentSn = new BatimentBsn();
            BatimentBd batiment = batrimentSn.trouverBatimentParId(idBatiment);

            batimentListes.add(batiment);
        }
//Todo : trier par date
        for (BatimentBd b : batimentListes) {
            LocationBsn locationBsn = new LocationBsn();
            List<LocationBd> locations = locationBsn.trouverListeLocationsParIdBatiment(b.getIdBatiment());

            if (locations != null && !locations.isEmpty()) {
                for (LocationBd location : locations) {
                    //System.out.println("location" + location.getIdLocation());
                    if (location.getLocataireActif() != null && location.getLocataireActif()) {
                        //System.out.println("locataire");
                        SuiviBsn suiviBsn = new SuiviBsn();
                        List<SuiviLoyerBd> suivis = suiviBsn.trouverListeSuiviParIdLocation(location.getIdLocation());

                        if (suivis != null && !suivis.isEmpty()) {
                            for (SuiviLoyerBd suivi : suivis) {
                                Calendar dateSui = new GregorianCalendar();
                                dateSui.setTime(suivi.getDateLoyerAttendu());
                                boolean dateOk = true;
                                if (moisEnCours != null && anneeEnCours != null) {
                                    if (dateSui.get(Calendar.MONTH) == moisEnCours && dateSui.get(Calendar.YEAR) == anneeEnCours) {
                                    } else {
                                        dateOk = false;
                                    }
                                }
                                if (dateOk) {
                                    LocataireBsn locataireBsn = new LocataireBsn();
                                    LocataireBd loc = locataireBsn.trouverLocataireParId(location.getIdLocataire());

                                    ElementAgenda elagentda = ElementAgenda.creerElementAgenda(b, location, loc, suivi);
                                    LigneAgenda ligneAgenda = new LigneAgenda();
                                    ligneAgenda.setDenominationBatiment(b.getDenomination());
                                    ligneAgenda.setNomPrenomLocataire("");
                                    ligneAgenda.setIdSuivi(suivi.getIdSuivi());
                                    ligneAgenda.setDateSuivi(suivi.getDateLoyerAttendu());
                                    EtatSuivi es = EtatSuivi.fromCode(suivi.getEtatLoyer());
                                    ligneAgenda.setEtatSuivi(es);
                                    EtatSuivi etat = EtatSuivi.A_VERIFIER;
                                    if (es != null) {
                                        etat = es;
                                    }
                                    elts.add(elagentda);
                                    elts2.add(ligneAgenda);
                                    ligne++;
                                }

                            }
                        }
                    }

                }
            }
            ligne++;
        }
        tableAgenda.getItems().setAll(elts2);
        /*tableAgenda.setModel(model);
         javax.swing.table.TableColumn colEtat = tableAgenda.getColumnModel().getColumn(4);
         JComboBox comboBox = BatimentSuiviPanel2.garnirComboEtatSuivi();
         colEtat.setCellEditor(new DefaultCellEditor(comboBox));
         javax.swing.table.TableColumn colid = tableAgenda.getColumnModel().getColumn(0);
         colid.setMinWidth(0);
         colid.setMaxWidth(0);
         tableAgenda.setModel(model);
         BatimentSuiviPanel2.colorerLignes(tableAgenda);
         model.addTableModelListener(new TableModelListener() {
         @Override
         public void tableChanged(TableModelEvent e) {
         int row = e.getFirstRow();
         int column = e.getColumn();
         TableModel model = (TableModel)e.getSource();
         String columnName = model.getColumnName(column);
         String etatLibelle = (String) model.getValueAt(row, column);
         Long idSuivi = (Long) model.getValueAt(row, 0);
         EtatSuivi et = EtatSuivi.fromLibelle(etatLibelle);
         ServiceBD.modifierSuivi(idSuivi,et);
             
         }
         });*/

    }

    @FXML
    private void btnChangerDateAction(ActionEvent action) {
    }
}
